/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sigodonto.view.managedbean;

import br.com.sigodonto.model.dao.DaoGenerico;
import br.com.sigodonto.model.entity.Dente;
import br.com.sigodonto.model.entity.Odontograma;
import br.com.sigodonto.model.entity.Paciente;
import br.com.sigodonto.view.datamodel.PacienteDataModel;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author Fidelis
 */
@ManagedBean
@ViewScoped
public class GerenciarOdontogramaMB implements Serializable {

    /**
     * Creates a new instance of GerenciarOdontogramaMB
     */
    private Paciente pacienteSelecionado;
    private PacienteDataModel pacienteDataModel;
    private DaoGenerico daoGenerico;
    private List<String> denteEstados;
    private Odontograma odontograma;
    private Dente denteSelecionado;
    private String faceMarcacao;
    private String tipoMarcacao;
    private Dente d18;
    private Dente d17;
    private Dente d16;
    private Dente d15;
    private Dente d14;
    private Dente d13;
    private Dente d12;
    private Dente d11;
    private Dente d21;
    private Dente d22;
    private Dente d23;
    private Dente d24;
    private Dente d25;
    private Dente d26;
    private Dente d27;
    private Dente d28;
    private Dente d48;
    private Dente d47;
    private Dente d46;
    private Dente d45;
    private Dente d44;
    private Dente d43;
    private Dente d42;
    private Dente d41;
    private Dente d31;
    private Dente d32;
    private Dente d33;
    private Dente d34;
    private Dente d35;
    private Dente d36;
    private Dente d37;
    private Dente d38;
    private List<Dente> dentesModificados;

    public GerenciarOdontogramaMB() {
        this.odontograma = new Odontograma();
        this.daoGenerico = new DaoGenerico();
        List<Paciente> pacientes = this.daoGenerico.listarTodos(Paciente.class);
        this.pacienteDataModel = new PacienteDataModel(pacientes);
        this.denteEstados = new ArrayList<String>();
        this.denteEstados.add("normal");
        this.denteEstados.add("estado1");
        this.denteEstados.add("estado2");
        this.denteEstados.add("estado3");
        this.denteEstados.add("estado4");
        this.denteEstados.add("estado5");
        this.denteEstados.add("estado6");
        this.denteEstados.add("estado7");
        this.denteEstados.add("estado8");
        this.denteEstados.add("estado9");
        this.montarOdontograma(null);
        this.denteSelecionado = this.d18;
        this.dentesModificados = new ArrayList<Dente>();
    }

    public void marcarFace() {
        FacesMessage message = new FacesMessage();
        String msg;
        message.setSeverity(FacesMessage.SEVERITY_INFO);

        if (this.faceMarcacao != null && !this.tipoMarcacao.equals("0")) {

            if (this.faceMarcacao.equals("1")) {
                this.denteSelecionado.setFaceLingPal(tipoMarcacao);
            } else if (this.faceMarcacao.equals("2")) {
                this.denteSelecionado.setFaceDistal(tipoMarcacao);
            } else if (this.faceMarcacao.equals("3")) {
                this.denteSelecionado.setFaceOclusal(tipoMarcacao);
            } else if (this.faceMarcacao.equals("4")) {
                this.denteSelecionado.setFaceMesial(tipoMarcacao);
            } else if (this.faceMarcacao.equals("5")) {
                this.denteSelecionado.setFaceVestibular(tipoMarcacao);
            } else {
                msg = "ERRO NA MARCAÇÃO!";
                message.setSeverity(FacesMessage.SEVERITY_ERROR);
                message.setSummary(msg);
                FacesContext.getCurrentInstance().addMessage(null, message);
            }
        } else {
            msg = "SELECIONE TODAS AS OPÇÕES!";
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
            message.setSummary(msg);
            FacesContext.getCurrentInstance().addMessage(null, message);
        }
        this.faceMarcacao = null;
        this.tipoMarcacao = "0";
    }

    public void finalizarMarcacao() {
        boolean tem = false;
        for (Iterator<Dente> it = dentesModificados.iterator(); it.hasNext();) {
            Dente dente = it.next();
            if (this.denteSelecionado.getNumero().equals(dente.getNumero())) {
                it.remove();
                this.dentesModificados.add(denteSelecionado);
                tem = true;
                break;
            }
        }
        if (!tem) {
            this.dentesModificados.add(denteSelecionado);
        }
    }

    public void salvarOdontograma() {
        FacesMessage message = new FacesMessage();
        String msg = "ODONTOGRAMA ARMAZENADO COM SUCESSO!";
        message.setSeverity(FacesMessage.SEVERITY_INFO);

        if (this.pacienteSelecionado == null) {
            msg = "SELECIONE UM PACIENTE!";
            message.setSeverity(FacesMessage.SEVERITY_ERROR);

        } else {
            this.daoGenerico = new DaoGenerico();
            this.odontograma.setDentes(dentesModificados);
            this.odontograma.setData_realizacao(new Date());
            this.pacienteSelecionado.setOdontograma(odontograma);
            this.daoGenerico.atualizar(pacienteSelecionado);
            this.pacienteSelecionado = null;
            this.montarOdontograma(null);
            this.denteSelecionado = this.d18;
            this.odontograma = new Odontograma();
        }
        message.setSummary(msg);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public void onRowSelect(SelectEvent event) {
        this.odontograma = new Odontograma();
        this.montarOdontograma(null);
        this.dentesModificados = new ArrayList<Dente>();
    }

    public void geraraOdontograma() {
        if (this.pacienteSelecionado != null) {
            if (this.pacienteSelecionado.getOdontograma() != null) {
                this.odontograma = this.pacienteSelecionado.getOdontograma();
                if (!this.pacienteSelecionado.getOdontograma().getDentes().isEmpty()) {
                    this.dentesModificados = this.pacienteSelecionado.getOdontograma().getDentes();
                    this.montarOdontograma(this.dentesModificados);
                }
                FacesMessage message = new FacesMessage();
                String msg = "O PACIENTE SELECIONADO POSSUI ODONTOGRAMA CADASTRADO!";
                message.setSeverity(FacesMessage.SEVERITY_INFO);
                message.setSummary(msg);
                FacesContext.getCurrentInstance().addMessage(null, message);
            } else {
                this.odontograma = new Odontograma();
                this.montarOdontograma(null);
                this.dentesModificados = new ArrayList<Dente>();
            }
        } else {
            FacesMessage message = new FacesMessage();
            String msg = "SELECIONE UM PACIENTE!";
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
            message.setSummary(msg);
            FacesContext.getCurrentInstance().addMessage(null, message);
        }

    }

    private void montarOdontograma(List<Dente> dentesPaciente) {
        if (dentesPaciente == null) {
            this.d18 = new Dente("18", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d17 = new Dente("17", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d16 = new Dente("16", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d15 = new Dente("15", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d14 = new Dente("14", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d13 = new Dente("13", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d12 = new Dente("12", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d11 = new Dente("11", "normal", "p0", "p0", "p0", "p0", "p0");

            this.d21 = new Dente("21", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d22 = new Dente("22", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d23 = new Dente("23", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d24 = new Dente("24", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d25 = new Dente("25", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d26 = new Dente("26", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d27 = new Dente("27", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d28 = new Dente("28", "normal", "p0", "p0", "p0", "p0", "p0");

            this.d48 = new Dente("48", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d47 = new Dente("47", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d46 = new Dente("46", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d45 = new Dente("45", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d44 = new Dente("44", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d43 = new Dente("43", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d42 = new Dente("42", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d41 = new Dente("41", "normal", "p0", "p0", "p0", "p0", "p0");

            this.d31 = new Dente("31", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d32 = new Dente("32", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d33 = new Dente("33", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d34 = new Dente("34", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d35 = new Dente("35", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d36 = new Dente("36", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d37 = new Dente("37", "normal", "p0", "p0", "p0", "p0", "p0");
            this.d38 = new Dente("38", "normal", "p0", "p0", "p0", "p0", "p0");
        } else {
            for (Dente dente : dentesPaciente) {
                int numero = Integer.parseInt(dente.getNumero());
                switch (numero) {
                    case 18:
                        this.d18 = dente;
                        break;
                    case 17:
                        this.d17 = dente;
                        break;
                    case 16:
                        this.d16 = dente;
                        break;
                    case 15:
                        this.d15 = dente;
                        break;
                    case 14:
                        this.d14 = dente;
                        break;
                    case 13:
                        this.d13 = dente;
                        break;
                    case 12:
                        this.d12 = dente;
                        break;
                    case 11:
                        this.d11 = dente;
                        break;
                    case 21:
                        this.d21 = dente;
                        break;
                    case 22:
                        this.d22 = dente;
                        break;
                    case 23:
                        this.d23 = dente;
                        break;
                    case 24:
                        this.d24 = dente;
                        break;
                    case 25:
                        this.d25 = dente;
                        break;
                    case 26:
                        this.d26 = dente;
                        break;
                    case 27:
                        this.d27 = dente;
                        break;
                    case 28:
                        this.d28 = dente;
                        break;
                    case 48:
                        this.d48 = dente;
                        break;
                    case 47:
                        this.d47 = dente;
                        break;
                    case 46:
                        this.d46 = dente;
                        break;
                    case 45:
                        this.d45 = dente;
                        break;
                    case 44:
                        this.d44 = dente;
                        break;
                    case 43:
                        this.d43 = dente;
                        break;
                    case 42:
                        this.d42 = dente;
                        break;
                    case 41:
                        this.d41 = dente;
                        break;
                    case 31:
                        this.d31 = dente;
                        break;
                    case 32:
                        this.d32 = dente;
                        break;
                    case 33:
                        this.d33 = dente;
                        break;
                    case 34:
                        this.d34 = dente;
                        break;
                    case 35:
                        this.d35 = dente;
                        break;
                    case 36:
                        this.d36 = dente;
                        break;
                    case 37:
                        this.d37 = dente;
                        break;
                    case 38:
                        this.d38 = dente;
                        break;
                }
            }
        }

    }

    public Paciente getPacienteSelecionado() {
        return pacienteSelecionado;
    }

    public void setPacienteSelecionado(Paciente pacienteSelecionado) {
        this.pacienteSelecionado = pacienteSelecionado;
    }

    public PacienteDataModel getPacienteDataModel() {
        return pacienteDataModel;
    }

    public void setPacienteDataModel(PacienteDataModel pacienteDataModel) {
        this.pacienteDataModel = pacienteDataModel;
    }

    public List<String> getDenteEstados() {
        return denteEstados;
    }

    public void setDenteEstados(List<String> denteEstados) {
        this.denteEstados = denteEstados;
    }

    public Odontograma getOdontograma() {
        return odontograma;
    }

    public void setOdontograma(Odontograma odontograma) {
        this.odontograma = odontograma;
    }

    public Dente getDenteSelecionado() {
        return denteSelecionado;
    }

    public void setDenteSelecionado(Dente denteSelecionado) {
        this.denteSelecionado = denteSelecionado;
    }

    public String getFaceMarcacao() {
        return faceMarcacao;
    }

    public void setFaceMarcacao(String faceMarcacao) {
        this.faceMarcacao = faceMarcacao;
    }

    public String getTipoMarcacao() {
        return tipoMarcacao;
    }

    public void setTipoMarcacao(String tipoMarcacao) {
        this.tipoMarcacao = tipoMarcacao;
    }

    public Dente getD18() {
        return d18;
    }

    public void setD18(Dente d18) {
        this.d18 = d18;
    }

    public Dente getD17() {
        return d17;
    }

    public void setD17(Dente d17) {
        this.d17 = d17;
    }

    public Dente getD16() {
        return d16;
    }

    public void setD16(Dente d16) {
        this.d16 = d16;
    }

    public Dente getD15() {
        return d15;
    }

    public void setD15(Dente d15) {
        this.d15 = d15;
    }

    public Dente getD14() {
        return d14;
    }

    public void setD14(Dente d14) {
        this.d14 = d14;
    }

    public Dente getD13() {
        return d13;
    }

    public void setD13(Dente d13) {
        this.d13 = d13;
    }

    public Dente getD12() {
        return d12;
    }

    public void setD12(Dente d12) {
        this.d12 = d12;
    }

    public Dente getD11() {
        return d11;
    }

    public void setD11(Dente d11) {
        this.d11 = d11;
    }

    public Dente getD21() {
        return d21;
    }

    public void setD21(Dente d21) {
        this.d21 = d21;
    }

    public Dente getD22() {
        return d22;
    }

    public void setD22(Dente d22) {
        this.d22 = d22;
    }

    public Dente getD23() {
        return d23;
    }

    public void setD23(Dente d23) {
        this.d23 = d23;
    }

    public Dente getD24() {
        return d24;
    }

    public void setD24(Dente d24) {
        this.d24 = d24;
    }

    public Dente getD25() {
        return d25;
    }

    public void setD25(Dente d25) {
        this.d25 = d25;
    }

    public Dente getD26() {
        return d26;
    }

    public void setD26(Dente d26) {
        this.d26 = d26;
    }

    public Dente getD27() {
        return d27;
    }

    public void setD27(Dente d27) {
        this.d27 = d27;
    }

    public Dente getD28() {
        return d28;
    }

    public void setD28(Dente d28) {
        this.d28 = d28;
    }

    public Dente getD48() {
        return d48;
    }

    public void setD48(Dente d48) {
        this.d48 = d48;
    }

    public Dente getD47() {
        return d47;
    }

    public void setD47(Dente d47) {
        this.d47 = d47;
    }

    public Dente getD46() {
        return d46;
    }

    public void setD46(Dente d46) {
        this.d46 = d46;
    }

    public Dente getD45() {
        return d45;
    }

    public void setD45(Dente d45) {
        this.d45 = d45;
    }

    public Dente getD44() {
        return d44;
    }

    public void setD44(Dente d44) {
        this.d44 = d44;
    }

    public Dente getD43() {
        return d43;
    }

    public void setD43(Dente d43) {
        this.d43 = d43;
    }

    public Dente getD42() {
        return d42;
    }

    public void setD42(Dente d42) {
        this.d42 = d42;
    }

    public Dente getD41() {
        return d41;
    }

    public void setD41(Dente d41) {
        this.d41 = d41;
    }

    public Dente getD31() {
        return d31;
    }

    public void setD31(Dente d31) {
        this.d31 = d31;
    }

    public Dente getD32() {
        return d32;
    }

    public void setD32(Dente d32) {
        this.d32 = d32;
    }

    public Dente getD33() {
        return d33;
    }

    public void setD33(Dente d33) {
        this.d33 = d33;
    }

    public Dente getD34() {
        return d34;
    }

    public void setD34(Dente d34) {
        this.d34 = d34;
    }

    public Dente getD35() {
        return d35;
    }

    public void setD35(Dente d35) {
        this.d35 = d35;
    }

    public Dente getD36() {
        return d36;
    }

    public void setD36(Dente d36) {
        this.d36 = d36;
    }

    public Dente getD37() {
        return d37;
    }

    public void setD37(Dente d37) {
        this.d37 = d37;
    }

    public Dente getD38() {
        return d38;
    }

    public void setD38(Dente d38) {
        this.d38 = d38;
    }
}
